package com.ys.多线程.p3线程同步;

/**
 * 描述: ChangJiangBride  长江大桥对象-共享资源
 *
 * @author CodeYang
 * @version 2021/1/5 19:23
 */
public class ChangJiangBride {


    /**
     * 动车通过大桥
     */
    public synchronized void runDongChe(){
        // 使用synchronized修饰代码块，this表示当前new出来的ChangJiangBridge对象，他在Company里面创建的
        // 同步块必须要锁一个资源，可以锁当前对象this，也可以锁当前对象的某一个属性
        // synchronized (this) {
        // synchronized (lock) {
        // 括号里面锁住的对象必须是引用类型，不能是基本类型
        // synchronized (num) {
        // 除此之外，你还可以自己定义锁的类型
        // 使用synchronized加锁的原则：让你的锁足够的轻、小
        // 如果锁是当前对象的一个属性，最好使用final修饰，让其不可变

        synchronized (new FooLock()){
            System.out.println("自定义锁");
        }
        System.out.print("当前进入时间:"+System.currentTimeMillis());
        // 模动车通过需要5秒
        System.out.println(Thread.currentThread().getName()+"动车正在通过长江大桥,大约需要5秒");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("动车成功通过");

    }


    /**
     * 货车通过大桥
     */
    public synchronized void runHuoChe(){
        System.out.print("当前进入时间:"+System.currentTimeMillis());
        // 模动车通过需要5秒
        System.out.println(Thread.currentThread().getName()+"货车正在通过长江大桥,大约需要3秒");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("货车成功通过");

    }
}
